(function (window, undefined) {
    "use strict"
    var isTimeout = false ; /*设置是否超时*/
   const southsJsonp = function (url,params,fn,cb) {
        /*这个JSONP跨域请求数据只能使用get请求,不能使用post,因为post没有写*/
       /**
        * @url  请求地址
        * @params {object|funciton} {wd:"参数"} get请求参数(可以不传参数)
        * @fn  {function}
        * @cb  {object} {callback:"callback名称"}  不传参数就默认是callback
        *
        */

       /*1.在本地创建一个函数*/
       /*1.1 随机生成一个函数名称*/
       /*1.2 判断callback是否有值*/
       var callback ="";
        if(typeof cb=="undefined"){
            callback = "callback";
        }else {
            for (var key in cb) {
                callback = cb[key];
            }
        }
        /*判断params是函数还是对象,如果是函数就表示没有传入get请求参数,把params赋值给fn回调函数*/
        if(typeof params=="function"){
            fn = params;
        }
        var callBackName = 'southsJsonp_' + new Date().getTime();
        window[callBackName] = function (data) {
            isTimeout = true;
            fn(data)
            /*数据加载成功之后， 删除自己添加的标签*/
            window.document.body.removeChild(southsScript);

        };
        /*2.通过src属性请求网络地址。把本地的函数名称传递去过*/
        /*2.1 动态创建一个script标签 把它插入到DOM节点当中*/
        var southsScript = window.document.createElement('script');
        /*格式参数*/
        var sString = "";
        for (var key in params) {
            // var params = encodeURI(encodeURI(params[key]))  //中文参数转码
            sString += key + '=' + params[key] + '&';
        }
        /*拼接地址*/
       sString += callback + '=' + callBackName;
        url = url + '?' + sString;
        /*设置请求地址*/
       southsScript.src = url;
        window.document.body.appendChild(southsScript)
       setTime(callBackName,southsScript,fn)
    }
    /*是否超时函数*/
    function setTime(callBackName,southsScript,fn) {
        var time = setTimeout(function () {
            if(isTimeout){
                clearTimeout(time)
            }else{
                delete window[callBackName];
                fn(console.log("请求超时了(5秒时间)"))
                window.document.body.removeChild(southsScript);
            }
        },5000)


    }
    window.southsJsonp = southsJsonp;
})(window)


